プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則
https://gyazo.com/c8301af833f10ab30276f6fe21f89d30
著者:上田勲
要約
プログラミングの原則たちをギュッと凝縮した本。凝縮した、といえどその数は100を超える。
感想
最初に「プログラミングにはシルバーバレットは存在しない」と釘を刺してから始まるが、内容も確かに堅実で着実なものだ。しかも日々の心がけやプログラマの仕事との向き合い方に至るまで仔細に述べられているのが印象的であった。
リファクタリングの本をやりながら読めたのはタイミング的に良かったと思うが、それでも理解できない箇所が多々ある。
言葉として知っておくのが大事だなと思って読み進めた、時間を空けて読んでみて、この本の言葉が実感を伴って味わえるようになっていれば中級者かなぁ
そういうものかー、で終わっている箇所が多いがもっと「うんうん」と納得できるくらいに自分の中に事例があれば読み方が変わりそう。
世のエンジニアからしたらもしかしたら自明のことしか書かれていないかもしれないが、初心者から中級者へ行くまでに必ず一度目を通しておいて損はないのではないか
技術的な事項よりも、考え方や哲学的な箇所で結構ハッとさせられる感じ、私はエンジニアの世界のこういう哲学的なこと考えがちなところとか結構好きなんだなー
UNIX哲学
コードの臭い
「怠慢」「短気」「傲慢」であれ
エゴレスプログラミング
ヤクの毛刈り
ジョシュアツリーの法則
メソテース
面白かった章
5章のプログラマのルーティンの章めちゃくちゃ良かった。考え方やエンジニアとしてのあり方が書かれている。こういうことが形式知として皆で共有されていることの素晴らしさ。
こういうのを本に書いちゃうところが、エンジニアカッコいいなって思うところ。こんなにいろんな人が「どうあるべきか」を考えて論じている職業ってあるだろうか。例えば一般的にはリーダー論のようなものだと思うけど、立場に関わらずにこういう議論をすること自体が素晴らしいカルチャーだと思う。
最後のあとがき。人間のためのプリンシプルの「メソテース」の考え方は、個人的にも大事にしている感覚。改めて味わうことができたと思う
理解できなかった章
3章〜4章、ちょっと難しかった。コードの設計のにおける抽象的な話。もう少し経験を積んでから読み直したいと思った。
役立ちそう、使えそうな知識
2章は基本的なガイドラインで、シンプルな言葉で要点が掴めるので、覚えておくと良さそう。
直接的にいつ役立つ!ということではないにしても、最後の7章で出てくる、ジョシュアツリーの法則の通り、これを通読しておくことに価値がありそう
---
どうでもいいけどKindleのフォーマット読みづらい
まえがきが良い
プリンシプル、とは?
プログラマとしての成長の王道であり、近道である
抽象度が高く、普遍的である
ゆえに、プリンシプルを理解していれば、具体的な技術を学んだ時、その「存在理由」――つまり、「なぜその技術が必要なのか」を理解することができます。すると、ただ単に技術を学んでいくより、習得が早く、深くなります。知識が素通りしないような「知識の土台」「知識の取り網」が構築されるからです。
この本での用語の定義
プログラミング
コードそのものやプログラミングを指す場合など、意味が広いので、本書では「インターフェースやモジュールの裏に書かれているコード」という狭い意味で使っている。一方でプログラミングで書かれたもの全般を「コード」と定義する。
関数
コードの一部を切り出して呼び出し可能にしたもの
ルーチン、ファンクション、プロシージャ、メソッド、メッセージ、メンバ関数、などのことをまとめて呼ぶことにする
モジュール
関数や変数をある責任単位でまとめたもの
クラス、ファイル、コンポーネント、部品、ライブラリなどをまとめて呼ぶ
この本の特徴は、実際のコードが出てこないこと
コードは自分で考える!
プログラミングをする上で考えるべきこと、思考方法や教訓などについて書かれている
リファクタリングの本で出てきた実践を言語で表現した形
この本とリファクタリングを通して両方分かるようになるととても良さそう
パラパラ読みたいので電子書籍は失敗だった
シェルスクリプトを活用する
シェルスクリプトはコマンドライン・インタプリタとも呼ばれ、簡易な制御機構を備えています。これを利用して、コマンドやソフトウェア同士を結合し、流れ作業や定型処理を実現できます。
UNIXの思想に学ぶ
#2021.02 これ読み返していてめちゃくちゃいい!ってなった。読んだことを忘れている。残りの10%を故意に無視するmochi5o.icon 。対象ユーザーの90パーセントが満足する解を目指し、残りの10パーセントには「自分で何とかしてもらおう」というスタンスがよいバランスになります。90パーセントの解とは、難しい部分を故意に無視することです。難しい部分とは、問題の中でコストがかかる部分、時間がかかる部分、プログラミングしにくい部分です。もっとも難しい10パーセントを無視してよいのであれば、残りの問題は迅速に解決できます。
第4章 視点〜プログラマの視る角度〜
凝集度 モジュール同士の要素間の関係性(モジュールの中身に着目)
モジュールは、ただ単に同じ機能をまとめれば良いということでもない
凝集度の強度レベルは7つです。レベルが高い(数字が大きい)ほど純粋であり、強く、よいモジュールです。
凝集度の判定は、モジュール内の要素間の関係の親密さに着目して行います。
それぞれの凝集度の説明、図が少しわかりにくい
言っていることはなんとなく分かる
結合度 モジュール同士の関係の密接さ(モジュール間のデータの受け渡しに着目)
モジュール間で受け渡す引数の扱い方
モジュール同士の結合の、強さ、本数、方向性に着目して、より疎結合な構造を目指す
直交性 関連情報のリレーションの定義
リレーションについて、もっともよくある間違いは、「テーブル同士の関係」というものです。テーブル同士の関係を(ER図などを使って)デザインするのが、リレーショナルモデルだと、誤解される場合が多くあります。正確な定義を言うと、リレーショナルモデルにおけるリレーションとは、SQLで言うところの「テーブル」のことです。
リレーショナルモデルにおけるリレーションは、「見出し」と「本体」のペアで構成されます。見出しは、任意の個数の「属性」の集合です。この属性は、名前とデータ型のペアになっています。本体は、属性値の集合である「タプル(組)」の集合です。これをSQLで言うと、リレーションが「テーブル」、属性が「カラム(列)」、タプルが「行」と対応します。
第5章 習慣〜プログラマのルーティン〜
「怠慢」「短気」「傲慢」であれ
繰り返しをコードで自動化する、気に入らなければコードをすぐ書き換える、コードはプライドを持って書くこと
ボーイスカウトの規則
来た時よりも綺麗に=リポジトリから取ってきたら少しでも綺麗にしてコミットする
自分自身も間違いを犯すということを理解し、受け入れます。
書いたコードは、自分自身ではありません。
どれほど極めたと思っていても、上には上がいます。
相談なしに、コードを書き直しません。
自分よりもスキルが劣る人にも、尊敬と敬意と忍耐を持って接します。
世界で唯一変わらないことは、変わるということだけです。
本当の権威は、地位ではなく、知識から生じます。
信じるもののために戦います。ただし、負けは潔く受け入れます。
部屋に籠りきりはいけません。
「人に優しく、コードに厳しく」して、人ではなくコードを批評します。
一歩ずつ少しずつ
ついつい複数箇所を訂正してからコミットしてしまう
結局後戻りしてダンプしながら実装することをよくやってしまう
第6章 手法〜プログラマの道具箱
曳光弾=えいこうだん 行き先を照らすもの、動作する土台
プロトタイプとは異なる、プロトタイプはあくまでイメージを確認する用のハリボテ
曳光弾の場合は、確かに動くが最小の実装で土台だけのもの→これはそのままプロダクトに引き継がれる
とはいえ「動作する土台」はレベルが高そう
ドッグフーディング
自分のソフトウェアを味見する
忘れてしまいがちだけど、ユーザーに「便利です」と言って提供しているソフトウェアなら自ら使い続けることでそれが便利であると証明しなければいけない
作った後もユーザーとして使い続けること
ラバーダッキング(説明する、というデバッグ)
「誰かに」説明するつもりで課題を整理すると自己解決する
バスタブのアヒル(ラバーダック)にように「誰か」定期的にうなづくだけで良いことから
これはよく分かる。教えてもらおうと思って課題を整理していると突然コードが見えてくる
意識的に取り組むようになるとよりよい
自分で○分悩んだらテディに相談する、と決める
テディに○分相談してもダメだったら周りに聞く
コンテキスト
達人の考える過程を真似する
コンテキストの存在を意識しながら真似する
第7章 法則〜プログラミングのアンチパターン〜
ブルックスの法則
人月計算において、人と月は交換できない
言われてみれば確かにそう
2人で6ヶ月と6人で2ヶ月だと全然違うというのは分かりやすい
大人数いても結局手が余って進まないなど
生産性は単なる労働力の足し算にはならない
ジョシュアツリーの法則
#2021.02 名前から内容が想像つかなくて忘れていた!名前を知ることはまだまだやっていこうmochi5o.icon 名前を知らないと見えるようにならない、ということ
まずは頭の中にインデックスを貼ること
分からなくてもいいからどんどん入れておく
次に見たときにピンとくる
ヤクの毛刈り
本質ではないことに時間を浪費してしまうこと
ついつい作業から作業が派生してしまい、それに没頭してしまう
気づいたときに立ち止まって本来の目的を思い出すようにする
コードを読んでいても、追いかけているうちに何を目的としていたか忘れていることがある
メモを取りながら作業する
一旦考えなくていいこと、すでに考えたことを外(=メモ)においておく
人間のためのプリンシプル
ケアリング
相手をケアすることで相手の成長を助けるだけでなく、自分の成長を助ける
道徳法則
汝の意思の格率が、常に同時に普遍的立法の原理として妥当するように行為せよ
つまり、「自分自身の行動をとい、みんなが認めてくれるようなことであれば、それを行え」という意
メソテース(=中庸)
過不足なくバランスを持って取り組めるような徳のこと
全ての物事はグラデーションである、決して二項対立ではない
どの濃さの灰色を選ぶのか、という考え方